package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.UsuarioDao;
import edu.upc.clase.demo.entity.Usuario;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author gian
 */
@Repository
public class UsuarioDaoImpl extends SimpleJdbcDaoSupport implements UsuarioDao {

    private static Logger log = LoggerFactory.getLogger(UsuarioDaoImpl.class);

    @Autowired
    public UsuarioDaoImpl(DataSource dataSource) {
        log.info("Asignando el dataSource");
        setDataSource(dataSource);
    }

    @Override
    public Integer insertar(Usuario usuario) {

        getJdbcTemplate().update(
    "insert into usuario (codigo,tipousuario,nombre,apellidopaterno,apellidomaterno,sexo,"
    + "nrodocumento,email,celular,direccion,fechanacimiento,password,apelativo,"
    + "resumenautobiografico,sitioweb,nrocuenta,rutaimagen,fecharegistro,idbanco,"
    + "idtipodocumento,idestado) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?)",
    usuario.getCodigo(),usuario.getTipoUsuario(),usuario.getNombre(),usuario.getApellidoPaterno(),usuario.getApellidoMaterno(),usuario.getSexo(),
    usuario.getNroDocumento(),usuario.getEmail(),usuario.getCelular(),usuario.getDireccion(),usuario.getFechaNacimiento(),usuario.getPassword(),usuario.getApelativo(),
    usuario.getResumenAutobiografico(),usuario.getSitioWeb(),usuario.getNroCuenta(),usuario.getRutaImagen(),usuario.getFechaRegistro(),usuario.getIdBanco(),usuario.getIdTipoDocumento(),usuario.getIdEstado());                

                
                
              
        return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
    }

    @Override
    public void actualizar(Usuario usuario) {
        getJdbcTemplate().update(
                "update usuario set nombre = ?, email = ?, apellidopaterno = ? , apellidomaterno = ?,sexo = ?, "
                + " nrodocumento = ?, celular = ?,direccion = ? , idtipodocumento = ? "
                + " where idusuario = ? ", 
                usuario.getNombre(), usuario.getEmail(), usuario.getApellidoPaterno(), usuario.getApellidoMaterno(),
                usuario.getSexo(),usuario.getNroDocumento() , usuario.getCelular(),usuario.getDireccion() , usuario.getIdTipoDocumento(),usuario.getIdUsuario());
 
        
    }
    

    @Override
    public void eliminar(Usuario usuario) {
        getJdbcTemplate().update(
                "delete from usuario where idusuario = ?", usuario.getIdUsuario());
    }

    @Override
    public Usuario buscar(Integer idusuario) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select * from usuario where idusuario=?",
                    new BeanPropertyRowMapper<Usuario>(Usuario.class), idusuario);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Usuario> buscarTodos() {
        return getSimpleJdbcTemplate().query(
                "select idusuario,nombre,email,password from usuario",
                new BeanPropertyRowMapper<Usuario>(Usuario.class));
    }

    
    
    
    @Override
    public List<Usuario> buscarPorTipo(String tipo) {
        try{
            
         return getSimpleJdbcTemplate().query(
                "select * from usuario where tipousuario =?",
                new BeanPropertyRowMapper<Usuario>(Usuario.class), tipo);
        }catch(EmptyResultDataAccessException e){
            return null;
        }
                    
    }    
    
    @Override
    public Usuario buscar(String email) {
        try {
            return getSimpleJdbcTemplate().queryForObject(
                    "select idusuario, nombre, email,password from usuario where email=?",
                    new BeanPropertyRowMapper<Usuario>(Usuario.class), email);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }

    @Override
    public List<Usuario> buscarPorNombre(String nombre) {
        try {
            Map<String,String> parametros = new HashMap<String,String>();
            parametros.put("nombre","%"+nombre+"%");
            return getSimpleJdbcTemplate().query(
                    "select * from usuario where nombre like :nombre",
                    new BeanPropertyRowMapper<Usuario>(Usuario.class),parametros);
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
    }
}